package com.ruoyi.library.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.library.api.query.TwinRelationInfo.TwinRelationInfoQuery;
import com.ruoyi.library.api.vo.TwinNumberStatisticsVO;
import com.ruoyi.library.api.vo.TwinRelationInfo.TwinRelationInfoVO;
import com.ruoyi.library.domain.DtsDigitalTwin;
import com.ruoyi.library.api.query.DigitalTwinQuery;
import com.ruoyi.library.api.vo.DigitalTwinVO;
import org.apache.ibatis.annotations.Param;
import org.mybatis.spring.annotation.MapperScan;

import java.util.List;

/**
 * 孪生体mapper层
 *
 * @author ZhangYu
 * @date 2024/05/10
 */

@MapperScan
public interface DtsDigitalTwinMapper extends BaseMapper<DtsDigitalTwin> {

    /**
     * 获取最大孪生体编码
     *
     * @return 最大孪生体编码
     */
    String getMaxTwinCode();

    /**
     * 根据id查询数字孪生体
     *
     * @param id 唯一主键
     * @return 数字孪生体
     */
    DigitalTwinVO getTwinInfo(Long id);

    /**
     * 数字孪生体分页
     *
     * @param digitalTwinQuery 数字孪生体查询条件
     * @return 数字孪生体分页
     */
    Page<DigitalTwinVO> digitalTwinPage(Page<DigitalTwinVO> page, @Param("digitalTwinQuery") DigitalTwinQuery digitalTwinQuery);

    /**
     * 数字孪生体无绑定关系的数据分页
     *
     * @param digitalTwinQuery 数字孪生体查询条件
     * @return 数字孪生体无绑定关系的数据分页
     */
    Page<DigitalTwinVO> digitalTwinNoRelationPage(Page<DigitalTwinVO> page, @Param("digitalTwinQuery") DigitalTwinQuery digitalTwinQuery);

    /**
     * 查询数字孪生体关联信息（类）
     *
     * @param twinId 孪生id
     * @return 数字孪生体关联信息
     */
    TwinRelationInfoVO getTwinRelationInfoClass(Long twinId);

    /**
     * 查询数字孪生体关联信息（字段）
     *
     * @param twinId 孪生id
     * @return 数字孪生体关联信息
     */
    TwinRelationInfoVO getTwinRelationInfoField(Long twinId);

    /**
     * 数字孪生体关联信息分页
     *
     * @param twinRelationInfoQuery 孪生体关联信息查询参数
     * @return 数字孪生体关联信息分页
     */
    Page<TwinRelationInfoVO> twinRelationInfoPage(Page<TwinRelationInfoVO> page, @Param("twinRelationInfoQuery") TwinRelationInfoQuery twinRelationInfoQuery);

    /**
     * 数字孪生体数量统计
     *
     * @return 数量统计信息
     */
    TwinNumberStatisticsVO twinNumberStatistics();

    /**
     * 数字孪生体数量变化趋势
     *
     * @param timeList 时间列表
     * @return 数量统计信息
     */
    List<Integer> numberChangeTrend(@Param("timeList") List<String> timeList);

    /**
     * 查询数字孪生体关联信息列表
     *
     * @param twinId 孪生id
     * @return 数字孪生体关联信息列表
     */
    List<TwinRelationInfoVO> getTwinRelationInfoList(Long twinId);

}
